import { createParamDecorator, ExecutionContext } from '@nestjs/common';

/**
 * 获取当前请求的 JWT Token 装饰器
 * 
 * 从请求头 Authorization 中提取 Bearer Token
 * 
 * @example
 * ```ts
 * // 获取完整 Token（不含 "Bearer " 前缀）
 * @Post('logout')
 * async logout(@CurrentToken() token: string) {
 *   await this.authService.logout(token);
 * }
 * 
 * // 获取完整 Authorization 头（含 "Bearer " 前缀）
 * @Post('refresh')
 * async refresh(@CurrentToken(true) authHeader: string) {
 *   // authHeader = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
 * }
 * ```
 */
export const CurrentToken = createParamDecorator(
  (includeBearer: boolean = false, ctx: ExecutionContext): string | undefined => {
    const request = ctx.switchToHttp().getRequest();
    
    // 从请求头获取 Authorization
    const authHeader = request.headers?.authorization;
    
    if (!authHeader) {
      return undefined;
    }

    // 如果需要完整的 Authorization 头，直接返回
    if (includeBearer) {
      return authHeader;
    }

    // 默认去掉 "Bearer " 前缀，只返回 Token
    if (authHeader.startsWith('Bearer ')) {
      return authHeader.substring(7);
    }

    // 如果没有 "Bearer " 前缀，直接返回原值
    return authHeader;
  }
);

